Cookieを利用する(4) 名前と訪問回数を表示する
今回は、前回の「訪問回数を表示する」をさらに発展させて、名前と訪問回数を表示する方法を紹介します。ここでのポイントは、Cookieを読み書きする関数を汎用化することです。少し複雑になりますが、サンプルをよく研究し、ぜひともCookieをマスターしてください。

→ Cookieを使いやすくするには…?
 
前回の講座では、「document.cookie = "count="+n+ ……」という具合にクッキー名を指定して書き込み処理を行いました。しかし、今回は“名前”と“訪問回数”の2つのCookieを読み書きする必要があります。これを前回と同様に個別に処理すると、それだけJavaScriptが長くなってしまいます。そこで、Cookieにデータを書き込む関数と、Cookieからデータを読み込む関数を汎用化させます。このようにしておくと、読み書きするCookieの数が増えても手軽にJavaScriptを書けるようになります。


→ Cookieにデータを書き込む関数を汎用化する
 
まずは、Cookieにデータを書き込む関数を汎用化します。これは、クッキー名と値を引数で渡すようにすると実現できます。以下に示した例では、「setename」がクッキー名、「setdata」が値となります。このようにしておけば、関数を呼び出す際に2つの引数を指定するだけで、どんなクッキー名でも書き込みが行えます。なお、この場合は、値に数値または文字が含まれるため、escapeを使って「setdata」をASCII形式に変換しておきます。
function setCookie(setname,setdata){
t = new Date();
t.setTime(t.getTime()+(365*1000*60*60*24));
expt = t.toGMTString();
document.cookie = setname+"="+escape(setdata)+";expires="+expt;
}


→ Cookieからデータを読み込む関数を汎用化する
 
続いては、Cookieからデータを読み込む関数を汎用化します。この際に必要となる引数は、クッキー名となる「getname」だけです。Cookieから読み取った値「getdata」は、戻り値として元に返す必要があるため、「return getdata」を必ず最後に記述しておきます。そのほか、ASCII形式を文字に変換するunescapeも忘れないようにしてください。
function getCookie(getname){
cName = getname+"=";
getdata = null;
cCookie = document.cookie+";";
start = cCookie.indexOf(cName);
if (start != -1){
end = cCookie.indexOf(";",start);
getdata = unescape(cCookie.substring(start+cName.length,end));
}
return getdata;
}


→ 名前と訪問回数を表示するJavaScriptを記述する
 
2つの関数が記述できたら、あとは実行したい処理に従ってJavaScriptを記述します。今回の例では、以下のような流れでJavaScriptを作成しています。
<1>「namae」というクッキー名の値を「username」に読み込む(1行目)
<2>「username」が「null」であった場合は…(2行目)
  ・名前を入力してもらう(3行目)
   ※名前が入力されなかった場合は「匿名」にする(4〜6行目)
  ・名前をCookieに書き込む(7行目)
  ・訪問回数「count」を1にする(8行目)
<3>「username」が「null」でなかった場合は…(9行目)
  ・Cookieから訪問回数を読み込む(10行目)
<4>名前と訪問回数を表示する(12行目)
<5>訪問回数に1を追加する(13行目)
<6>訪問回数をCookieに書き込む(14行目)
username = getCookie("namae");
if (username == null){
username = prompt("ようこそ! 名前を入力してください","名前");
if (username == null){
username = "匿名";
}
setCookie("namae",username);
count = 1;
}else{
count = eval(getCookie("kaisuu"));
}
document.write(username+"さん"+count+"回目の訪問ありがとうござます");
count = count+1;
setCookie("kaisuu",count);


G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMIT1~] COiq COsI